/**
 *
    算法描述：模拟题，通过指针来确定当前指令指向的对象，指令结束后输出指针指向的对象的值即可
    也可以通过直接计算，计算出最终结果在第一个人的左边还是右边的第几个即可，此方法复杂度更低

    解决所需数据结构+算法：数组+模拟
**/
#include<iostream>
using namespace std;

bool face[100010]; // 记录每个人的朝向，false表示向左，true表示向右
string name[100010]; // 记录每个人的名字

int main() {
    int n, m, num, loc = 0;
    bool flag; // 记录当前指令
    cin >> n >> m;
    for(int i=0; i<n; i++)
        cin >> face[i] >> name[i];
    for(int i=0; i<m; i++) {
        cin >> flag >> num;
        if(face[loc] ^ flag) { // 代码核心问题：相同为负，不同为正。利用“位运算异或”来判断
            loc = (loc + num) % n;
        } else {
            loc = (loc + n - num) % n;
        }
    }

    cout << name[loc];

    return 0;
}